package com.huatai.bpmn.service;

import com.alibaba.fastjson.JSONObject;
import com.huatai.bpmn.entity.UrgeCheckEntity;
import com.huatai.bpmn.entity.dto.CompletionDto;
import com.huatai.bpmn.entity.dto.PageDto;
import com.huatai.bpmn.entity.vo.HistoryVO;
import com.huatai.bpmn.entity.vo.TaskManageVo;
import com.huatai.bpmn.entity.vo.UserTaskVo;
import com.huatai.bpmn.entity.vo.YYTaskVo;
import com.huatai.common.api.R;
import com.huatai.common.entity.UserInfo;
import org.activiti.engine.history.HistoricActivityInstance;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author :yxy
 * @date : 2024/2/22
 */
public interface YYActivitiService {
	/**
	 * 部署流程定义 文件上传方式部署流程定义
	 * @param file bpmn文件
	 * @param deployName 部署名称
	 * @param externalParameterId 绑定表单标识
	 * @return
	 * @throws IOException
	 */
	R<Map<String, Object>> deploy(MultipartFile file, String deployName, String externalParameterId,int type);
	/**
	 * 查看部署流程集合
	 */
	R<Map<String, Object>> getDeployList(PageDto pageDto);
	/**
	 * 创建流程定义-创建项目数据
	 */
	boolean startProcess(JSONObject jsonObject,String uuid);

    void fileDelete(String url);

	List<YYTaskVo> findToDoTask(String myKey, String userId);

	boolean completionTask(CompletionDto completionDto);

	/**
	 * 查询已办任务列表
	 * @return
	 */
	List<HistoricActivityInstance> findCompleteTask(String processId);

	/**
	 * 查看流程实例的历史处理信息
	 * @param processId
	 * @return
	 */
	Map<String, List<HistoryVO>> taskHistoryInfo(String processId);

	/**
	 * 查询当前用户发起的任务
	 * @return
	 */
	List<UserTaskVo> findTaskByUser();

	HashMap<String, ArrayList<TaskManageVo>> projectAudit();

	HashMap<String, Object> findToDoTaskCount(String userId);

	/**
	 * 一键催促-可以催促多个
	 * @param taskManageVos
	 * @return
	 */
	boolean urge(List<TaskManageVo> taskManageVos);

	/**
	 * 获取当前用户的催办任务
	 * @return
	 */
	List<UrgeCheckEntity> getUrgeTask();

	/**
	 * 催办任务已读
	 * @param id
	 * @return
	 */
	boolean finishTask(Long id);

	/**
	 * 强制删除已部署流程定义
	 * @param id
	 * @return
	 */
	boolean deleteDeploy(String id);

}
